package top.z.work.module.system.convert;

import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryChain;
import com.mybatisflex.core.query.QueryWrapper;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import top.z.work.framework.common.pojo.PageInfo;
import top.z.work.module.system.controller.config.vo.SystemConfigCreateVO;
import top.z.work.module.system.controller.config.vo.SystemConfigModifyVO;
import top.z.work.module.system.controller.config.vo.SystemConfigVO;
import top.z.work.module.system.entity.SystemConfig;

import java.util.List;

@Mapper
public interface SystemConfigConvert {

    SystemConfigConvert INSTANCE = Mappers.getMapper(SystemConfigConvert.class);

    default QueryWrapper convert(SystemConfigVO config) {
        return QueryChain.of(SystemConfig.class)
                .eq(SystemConfig::getIdentity, config.getIdentity())
                .eq(SystemConfig::getName, config.getName())
                .eq(SystemConfig::getCode, config.getCode())
                .eq(SystemConfig::getValue, config.getValue())
                .eq(SystemConfig::getSort, config.getSort())
                ;
    }

    List<SystemConfigVO> convert(List<SystemConfig> list);

    SystemConfigVO convert(SystemConfig config);

    SystemConfig convert(SystemConfigModifyVO config);

    SystemConfig convert(SystemConfigCreateVO config);

    default PageInfo<SystemConfigVO> convert(Page<SystemConfig> page) {
        List<SystemConfigVO>     list     = page.getRecords().stream().map(this::convert).toList();
        PageInfo<SystemConfigVO> pageInfo = new PageInfo<>();
        pageInfo.setList(list);
        pageInfo.setTotal(page.getTotalRow());
        pageInfo.setSize(page.getPageSize());
        pageInfo.setPage(page.getPageNumber());
        return pageInfo;
    }

}
